Семинары по параллельному программированию
Рыбинск, РГАТА 2007 |
||
Список семинаров | Форум | Ссылки |
Лабораторная работа №2 Задача #2 - Threads VS Processes
Краткое описание:
p.s. Для замеров времени Вы можете использовать Utility.PerfCounter или System.DateTime.Now;
Неформальное описание:
Ниже будет приведен псевдокод, иллюстрирующий схему замеров:
1. Время создания 1 процесса в зависимости от объема выделяемой памяти процесс "X": Выделить память объемом N; //где N - количество мегабайт, задаваемое пользователем Timer.Start(); запустить процесс "X"; дождаться завершения запущенного процесса; Timer.Stop(); Вывести результаты;2. Время создания 1 потока процесс "X": Timer.Start(); запустить поток; дождаться завершения запущенного потока; Timer.Stop(); Вывести результаты;3. Временные затраты на диспетчеризацию K-процессов //где K - количество процессов, задаваемое пользователем функция F(кол_итераций): for(кол_итераций) имитация_большого_объема_работы; процесс "X": K раз: запустить процесс "X" и вызвать в нем F(1000); Timer.Start(); K раз: запустить процесс "X" и вызвать в нем F(1000); дождаться завершения запущенных процессов; Timer.Stop(); Вывести результаты;4. Временные затраты на диспетчеризацию K-потоков //где K - количество потоков, задаваемое пользователем функция F(кол_итераций): for(кол_итераций) имитация_большого_объема_работы; процесс "X": Timer.Start(); K раз: запустить поток и вызвать в нем F(1000); дождаться завершения запущенных потоков; Timer.Stop(); Вывести результаты;Для наглядности проделать туже работу (1000*K раз сымитировать большой_объем_работы) в одном потоке (последовательно): функция F(кол_итераций): for(кол_итераций) имитация_большого_объема_работы; процесс "X": Timer.Start(); F(1000*K); дождаться завершения запущенных потоков; Timer.Stop(); Вывести результаты; |
Подобные замеры приводятся в книге [1], посвященной ОС QNX.
Ниже приведены исходные коды программ замеров и результаты замеров.
Интересно сравнить временные показатели работы процессов и потоков в Windows и QNX. 1. Время создания 1 процесса в зависимости от объема выделяемой памяти (p2-1.cc)
2. Время создания 1 потока(p2-2.cc) Время на создание одного потока в QNX составило 0.147139 msec, если сравнить это время с временем создания процесса (при 0Mb выделяемой памяти), то видно что разница составляет 3-4 раза.
3. Временные затраты на диспетчеризацию K-процессов(p4-1.cc), K-потоков(p4-2.cc) и время последовательного выполнения эквивалентной работы(p4-3.cc)
Содержание отчета к л.р.:
Возможные ошибки: Отсчет времени заканчивается до завершения работы активных элементов (процессов\потоков) [1] Цилюрик О., Горошко Е. QNX/UNIX: анатомия параллелизма. - СПб.: Символ-Плюс, 2006 |
Но дело не только в различии API (так QNX API является POSIX, а WinAPI нет), дело ещё и в
кардинальных архитектурных различиях.
|